/**
 * @author Thomas Pfeiffer
 * @file   Nortel.h
 * @brief  Declaration of the class Nortel
 */
#ifndef NORTEL_H
#define NORTEL_H

#include <string>
#include "Object.h"
#include "INortel.h"
#include "Crypter.h"

/**
 * @class Nortel
 * @brief Adapter between the Nortel and the intern interface.
 * The class Nortel implements the Interface INortel and calls
 * the necessary functions of our intern interface.
 */
class Nortel : public Object, public INortel {
public:
	void Encipher(TEncoding enc, std::string const & fileName);
	void Decipher(TEncoding enc, std::string const & fileName);

private:
	/**
	 * @brief Uses the CrypterFactory to get a concrete crypto algorithm object.
	 * Maps the Algorithm enum of the INortel interface to the Algorithm enum of
	 * the CrypterFactory and uses it to get a pointer to the desired crypto 
	 * algorithm.
	 * @param enc The type of the desired algorithm
	 * @return A Pointer to a crypto algorithm, or 0 if the Algorithm is unknown.
	 */
	Crypter * getCrypt(TEncoding enc);
};

#endif